
#include "nane/WindowSystem/Window.h"
#include "nane/WindowSystem/WindowImpl_.h"
#include "nane/WindowSystem/WindowSystemImpl_.h"
#include "nane/core/assert.h"

namespace nane 
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Window::Window( const NullType& )
        : SubSystemProduct()
        , m( NULL )
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Window::Window( Implementation* _impl )
        : SubSystemProduct( _impl )
        , m( _impl )
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Window::Window( const Window& _other )
        : SubSystemProduct( _other )
        , m( _other.m )
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IWindow::OSHandle Window::GetOSHandle()
    {
        NANE_ASSERT_RV( m != NULL, "Window must be valid", NULL );
        return m->interface->GetOSHandle();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void Window::Show()
    {
        NANE_ASSERT_R( m != NULL, "Window must be valid" );
        m->interface->Show();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void Window::UpdateMessages()
    {
        NANE_ASSERT_R( m != NULL, "Window must be valid" );
        m->interface->UpdateMessages();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void Window::SetMessageHandler( IWindowMessageHandler* _handler )
    {
        NANE_ASSERT_R( m != NULL, "Window must be valid" );
        m->interface->SetMessageHandler(_handler);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
